@@ -120,7 +120,7 @@ module Agents |
||
| 120 | 120 |
|
| 121 | 121 |
# Check for optional fields |
| 122 | 122 |
if options['mode'].present? |
| 123 |
- errors.add(:base, "mode must be set to on_change or all") unless %w[on_change all].include?(options['mode']) |
|
| 123 |
+ errors.add(:base, "mode must be set to on_change, all or merge") unless %w[on_change all merge].include?(options['mode']) |
|
| 124 | 124 |
end |
| 125 | 125 |
|
| 126 | 126 |
if options['expected_update_period_in_days'].present? |
@@ -226,10 +226,12 @@ module Agents |
||
| 226 | 226 |
incoming_events.each do |event| |
| 227 | 227 |
interpolate_with(event) do |
| 228 | 228 |
url_to_scrape = event.payload['url'] |
| 229 |
- valid_url = url_to_scrape =~ /^https?:\/\//i |
|
| 230 |
- docs = valid_url ? check_url(url_to_scrape) : [] |
|
| 229 |
+ docs = [] |
|
| 230 |
+ docs = check_url(url_to_scrape) if url_to_scrape =~ /^https?:\/\//i |
|
| 231 | 231 |
docs.each do |doc| |
| 232 |
- create_event payload: doc |
|
| 232 |
+ new_payload = interpolated['mode'].to_s == "merge" ? event.payload.dup : {}
|
|
| 233 |
+ new_payload.merge! doc |
|
| 234 |
+ create_event payload: new_payload |
|
| 233 | 235 |
end |
| 234 | 236 |
end |
| 235 | 237 |
end |
@@ -252,7 +254,7 @@ module Agents |
||
| 252 | 254 |
end |
| 253 | 255 |
end |
| 254 | 256 |
true |
| 255 |
- when 'all', '' |
|
| 257 |
+ when 'all', 'merge', '' |
|
| 256 | 258 |
true |
| 257 | 259 |
else |
| 258 | 260 |
raise "Illegal options[mode]: #{interpolated['mode']}"
|
@@ -521,6 +521,16 @@ fire: hot |
||
| 521 | 521 |
|
| 522 | 522 |
expect(Event.last.payload['response_info']).to eq('The reponse from XKCD was 200 OK.')
|
| 523 | 523 |
end |
| 524 |
+ |
|
| 525 |
+ it "should support merging of events" do |
|
| 526 |
+ expect {
|
|
| 527 |
+ @checker.options = @valid_options |
|
| 528 |
+ @checker.options[:mode] = "merge" |
|
| 529 |
+ @checker.receive([@event]) |
|
| 530 |
+ }.to change { Event.count }.by(1)
|
|
| 531 |
+ last_payload = Event.last.payload |
|
| 532 |
+ expect(last_payload['link']).to eq('Random')
|
|
| 533 |
+ end |
|
| 524 | 534 |
end |
| 525 | 535 |
end |
| 526 | 536 |
|